#ifndef _QUEUE_H_
#define _QUEUE_H_

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

//----------------------------//
//----------------------------//

struct _queue_header
{
	uint32_t buf_len;  //队列缓冲区长度
	uint8_t is_full;   //队列是否已满
	uint32_t header;   //队头,对头当前所在位置与整个队列缓冲区偏移字节数
	uint32_t tail;	   //队尾,队尾当前所在位置与整个队列缓冲区偏移字节数
};

typedef struct _queue_header queue_header_t;

//----------------------------//
//----------------------------//

struct _queue
{
	char *p_queue_buf;
	uint32_t  queue_buf_len;
	
	queue_header_t *p_queue_header;
};

typedef struct _queue queue_t;

//----------------------------//
//----------------------------//

int queue_create(queue_t *p_queue, char *p_buf, const uint32_t buf_len);

int queue_open(queue_t *p_queue, const char *p_buf);

int queue_write(queue_t *p_queue, const char *p_data_buf, const int buf_len);

int queue_read(queue_t *p_queue, char *p_data_buf, const int buf_len);

int queue_close(queue_t *p_queue);
/*
int queue_len(queue_t *p_queue);
*/

#ifdef __cplusplus
}
#endif

#endif
